﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Mvc;
using Libreria.SICOM.Negocio;
using Libreria.SICOM.Modelo;
using System.Configuration;
using Web.SICOM.Models;
using System.Web.Script.Serialization;

namespace Web.SICOM.Controllers
{
    public class TipodeLugarController : Controller
    {
        //
        // GET: /TipodeLugar/

        public ActionResult Index()
        {
            if (Session["Autenticado"] != "True")
            {
                return RedirectToAction("Index", "Inicio");
            }
            String cdc = ConfigurationManager.ConnectionStrings["SICOM"].ConnectionString;
            TipodeLugarNegocio tipolbo = new TipodeLugarNegocio();
            ViewData.Model = tipolbo.consultarTiposdeLugar(ConfigurationManager.ConnectionStrings["SICOM"].ConnectionString);

            if (((List<TipodeLugar>)ViewData.Model).Count == 0)
            {
                ViewData.Model = "No Hay Datos de tipos de lugar Asociados";

            }
            return View();
        }

        public ActionResult Crear()
        {
            if (Session["Autenticado"] != "True")
            {
                return RedirectToAction("Index", "Inicio");
            }
            return View();

        }

        [HttpPost]
        public ActionResult Insertar(TipodeLugar tipodelugar)
        {

            String cdc = ConfigurationManager.ConnectionStrings["SICOM"].ConnectionString;
            List<TipodeLugar> tiposdelugar = new TipodeLugarNegocio().consultarTiposdeLugar(cdc);
            for (int i = 0; i <= tiposdelugar.Count - 1; i++)
            {
                if (tiposdelugar[i].Nombre == tipodelugar.Nombre)
                {
                    ModelState.AddModelError("Nombre", "El Nombre especificado ya se encuentra en uso.");
                }
            }

            if (!ModelState.IsValid)
            {
                TipodeLugarNegocio tipolbo = new TipodeLugarNegocio();
                ViewData.Model = tipolbo.consultarTiposdeLugar(cdc);
                return View("Crear", tipodelugar);
            }
            String nametipolugar = tipodelugar.Nombre;
            String descripcion = tipodelugar.Descripcion;
            new TipodeLugarNegocio().crearTipodeLugar(nametipolugar, null, descripcion, cdc);
            return RedirectToAction("Index");
        }


        public ActionResult Editar(Int32? id)
        {
            if (Session["Autenticado"] != "True")
            {
                return RedirectToAction("Index", "Inicio");
            }
            List<TipodeLugar> tipodelugar = new List<TipodeLugar>();
             
             ViewData.Model = new TipodeLugarNegocio().consultarPorIdentificador(id, ConfigurationManager.ConnectionStrings["SICOM"].ConnectionString);
            return View();
        }


        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Actualizar(TipodeLugar tipodelugar)
        {
            String cdc = ConfigurationManager.ConnectionStrings["SICOM"].ConnectionString;
            Int32? id = tipodelugar.Identificador;
            String nametipolugar = tipodelugar.Nombre;
            String descripcion = tipodelugar.Descripcion;
            String foto = tipodelugar.Foto;
            if (!ModelState.IsValid)
            {
                return View("Editar", tipodelugar);
            }
            new TipodeLugarNegocio().actualizarTipodeLugar(id, nametipolugar, foto, descripcion, cdc);
            return RedirectToAction("Index");
        }

        public ActionResult Eliminar(TipodeLugar tipodeLugar)
        {
            if (Session["Autenticado"] != "True")
            {
                return RedirectToAction("Index", "Inicio");
            }
            Int32? id = tipodeLugar.Identificador;
            String cdc = ConfigurationManager.ConnectionStrings["SICOM"].ConnectionString;
            List<Lugar> listadelugares = new List<Lugar>();
            Lugar lugar = new Lugar(cdc);
            lugar.Identificador = null;
            lugar.Nombre = null;
            lugar.Latitud = null;
            lugar.Longitud = null;
            lugar.Foto = null;
            lugar.Descripcion = null;
            lugar.Idtipodelugar = id;
            listadelugares = lugar.consultar();

            if (listadelugares.Count == 0)
            {
                new TipodeLugarNegocio().eliminarTipodeLugar(id, "null", cdc);
                return RedirectToAction("Index");
            }

            ModelState.AddModelError("Identificador", " No se puede eliminar el Tipo de Lugar especificado, se encuentra en uso.");
            TipodeLugarNegocio tipolugarbo = new TipodeLugarNegocio();
            ViewData.Model = tipolugarbo.consultarTiposdeLugar(cdc);
            return View("Index", ViewData.Model);
        }

        public ActionResult FormFileupload(TipodeLugar tipodeLugar)
        {
            Int32? id = tipodeLugar.Identificador;
            @ViewData["id"] = id;
            return View(ViewData);
        }

        [HttpPost]
        public ActionResult UploadFile(HttpPostedFileBase hidFileID, int? idtipolugar)
        {
            String cdc = ConfigurationManager.ConnectionStrings["SICOM"].ConnectionString;
            //var tipofoto = Path.GetFileName(hidFileID.ContentType);
            string[] fototemporal = hidFileID.FileName.Split('.');
            String foto = idtipolugar + "." + fototemporal[1];
            var path = Path.Combine(Server.MapPath("~/Content/img/tiposlugar"), foto);

            TipodeLugar tipodelgar = new TipodeLugarNegocio().consultarPorIdentificador(idtipolugar, cdc);
            if (tipodelgar.Foto != null)
            {
                System.IO.File.Delete(Server.MapPath("~/Content/img/tiposlugar/") + tipodelgar.Foto);                
            }
            tipodelgar.Foto = foto;

            new TipodeLugarNegocio().actualizarTipodeLugar(idtipolugar, tipodelgar.Nombre, tipodelgar.Foto, tipodelgar.Descripcion, cdc);
            Imagen imagenmod = new Imagen();
            var resizedImage = imagenmod.ResizeImage(hidFileID, new Size(40, 38));
            imagenmod.SaveImage(resizedImage, path);

            return RedirectToAction("Index");
        }
        


    }
}
